//go:build wireinject

package main

import (
	"github.com/google/wire"
	"gquickstarter/internal/repository"
	"gquickstarter/internal/repository/dao"
	"gquickstarter/internal/service"
	"gquickstarter/internal/web"
	"gquickstarter/ioc"
)

func Create() *App {
	wire.Build(
		ioc.CacheInitialization,
		//ioc.GoEmailInitialization,
		ioc.LoggerInitialization,
		ioc.YamlConfigInitialization,
		ioc.DataBaseInitialization,
		ioc.ServiceInitialization,
		ioc.GinMiddlewaresInitialization,

		service.CreateAccountService,
		//service.CreateEmailService,

		dao.CreateAccountDAO,

		repository.CreateEmailRepository,
		repository.CreateAccountRepository,

		web.CreateAccountController,

		wire.Struct(new(App), "*"))
	return new(App)
}
